iT邦幫忙

2025 iThome 鐵人賽

DAY 29
0
生成式 AI

AI 三十天,哎呀每天都很難:OpenAI API 生存指南系列 第 29

Day 29:整合 OpenAI API 打造智慧文件助理

  • 分享至 

  • xImage
  •  

這 30 天裡,我們學了文字、圖片、語音、Embeddings 等各種功能。
那如果把這些功能整合起來,能做什麼?
答案是:
讓 AI 幫你「讀文件、抓重點、回答問題」。今天,我們就要做一個小型「智慧文件助理」

這個小工具能讀取使用者上傳的 PDF/TXT檔
使用 Embeddings 轉成向量,用 Chat Completions 分析與回答問題

from openai import OpenAI
import os, json
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
client = OpenAI(api_key="YOUR OPENAI API KEY")


def get_embeddings(texts):
    vectors = []
    for t in texts:
        emb = client.embeddings.create(
            model="text-embedding-3-small",
            input=t
        )
        vectors.append(emb.data[0].embedding)
    return np.array(vectors)

def find_best_match(question, texts, vectors):
    q_emb = client.embeddings.create(
        model="text-embedding-3-small",
        input=question
    ).data[0].embedding

    sims = cosine_similarity([q_emb], vectors)[0]
    best_idx = int(np.argmax(sims))
    return texts[best_idx]

def ask_ai(question, context):
    messages = [
        {"role": "system", "content": "你是一位文件助理,根據內容回答問題。"},
        {"role": "user", "content": f"文件內容:{context}\n\n問題:{question}"}
    ]
    resp = client.chat.completions.create(model="gpt-4o-mini", messages=messages)
    return resp.choices[0].message.content

texts = [
    "OpenAI API 提供 Chat, Image, Audio, Embeddings 等功能。",
    "Chat 模型可以生成對話與程式碼。",
    "Embeddings 可用於語意搜尋與推薦系統。"
]

vectors = get_embeddings(texts)
question = input("請輸入問題:")
context = find_best_match(question, texts, vectors)
answer = ask_ai(question, context)

print("\nAI 回答:", answer)

https://ithelp.ithome.com.tw/upload/images/20251013/20169376ZM9l7wPcnq.png

OpenAI API 的每個功能都很強,但真正厲害的地方,是 把它們整合起來解決問題
今天的智慧文件助理,就是一個縮小版的 ChatGPT 文件問答系統。
明天就是最後一天,我們要總結這 30 天學到的全部內容!


上一篇
Day 28:打造屬於你的 AI 全能小幫手
下一篇
Day 30:AI 三十天,真的每天都很難
系列文
AI 三十天,哎呀每天都很難:OpenAI API 生存指南30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言